

// 基本息接口定义
export interface MainAttributeInfoInterface {
    attributeName: string; // 列对应的数据字段名称，【必填】
    attributeLabel: string; // 列显示的标题文本，【必填】
    returnDto?: string; // 归属实体对象， 即atttributeName 归属于哪个实体对象，针对返回结果存在嵌套时的处理。如果果该属性不为空，则prop="dog.name"， 即【returnDto.attributeName】。
    editType: 'text' | 'password' | 'number' | 'email' | 'select' | 'url' | 'date' | 'datetime-local' | 'month' | 'week' | 'time' | 'color' | 'textarea';
    unUpdatable?: boolean; // 指定在修改的场合下，该属性信息是否可以编辑。为什么是notUpdate,因为默认大部分属性都是可以进行变更的。
    unInsertable?: boolean; //  指定在新增的场合下，该属性信息是否可以编辑。为什么是notInsert,因为默认大部分属性都是需要进行设置的。
    attributeTooltip?: string; // 列的提示文本，【可选】
    isSortable?: boolean; // 是否允许列排序，默认【false】
    isDefaultHidden?: boolean; // 是否默认隐藏，默认都展示，不隐藏。
    extendsAttributeInfo: ExtendsAttributeInfoInterface; // 关于table交互的定义，【必选】。
    rules?: RuleItem[]; // 作用于新增和修改场合，属性的校验规格。按常理，除了【required】是否必填外，这两个场景，一般性校验规则是相同的。
    selectOperation?: SelectOperation;
    textOperation?: TextOperation;
    addDefaultValue?: any; // 新增时的默认值
}

export interface ExtendsAttributeInfoInterface {
    showRequired?: boolean; // 是否必须展示列标注， 默认非必须，都允许勾选与取消, 作用域【选择列】弹框。
    columnWidth?: number | string; // 列的宽度，可以是数字（如 180）或字符串（如 "180px"）
    contentAlign?: "left" | "center" | "right"; // 列内容的对齐方式，可选值为左对齐、居中对齐、右对齐
    // eslint-disable-next-line
    formatterFunction?: (row: any, column: MainAttributeInfoInterface) => string; // 自定义格式化函数，用于对列数据进行格式化处理
    fixedPosition?: "left" | "right"; // 列是否固定，可选值为左侧固定或右侧固定
    slotName?: string; // 自定义插槽的名称，用于支持更复杂的列内容渲染
}

export interface RuleItem {
    /** 是否必填。`true`：字段不能为空；`false`：字段可以为空。 */
    required?: boolean;
    /** 校验失败时的提示信息。例如：`姓名不能为空`。 */
    message?: string;
    /** 触发校验的时机。`blur`：字段失去焦点时触发；`change`：字段值改变时触发。 */
    trigger?: "blur" | "change";
    /** 字段的最小长度或最小值。字符串表示最小字符数，数字表示最小值。 */
    min?: number;
    /** 字段的最大长度或最大值。字符串表示最大字符数，数字表示最大值。 */
    max?: number;
    /** 字段的类型校验。支持：`string`、`number`、`boolean`、`method`、`regexp`、`integer`、`float`、`array`、`object`、`enum`、`date`、`url`、`hex`、`email`。 */
    type?:
    | "string"
    | "number"
    | "boolean"
    | "method"
    | "regexp"
    | "integer"
    | "float"
    | "array"
    | "object"
    | "enum"
    | "date"
    | "url"
    | "hex"
    | "email";
    /** 正则表达式校验。例如：`/^[A-Za-z]+$/` 表示只能输入字母。 */
    pattern?: RegExp;
    /** 自定义校验函数。`rule`：当前校验规则；`value`：字段的值；`callback`：校验完成后的回调函数。 */
    // eslint-disable-next-line
    validator?: (rule: any, value: any, callback: any) => void;
    /** 字段长度必须等于指定值。例如：`len: 5` 表示字段长度必须为 5。 */
    len?: number;
    /** 字段值必须在指定枚举值范围内。例如：`enum: ["Beijing", "Shanghai"]` 表示字段值只能是 `Beijing` 或 `Shanghai`。 */
    enum?: any[];
    /** 字段不能全是空白字符。`true`：字段不能全是空白字符；`false`：字段可以全是空白字符。 */
    whitespace?: boolean;
}

export interface Params {
    [key: string]: any; // 允许任意字符串键和任意类型的值
}

// 查询表单属性定义
export interface SearchFormFieldDefinition {
    /** 查询字段的名称，对应表单数据的键名。例如：`name`、`address`、`date` 等。 */
    queryAttributeName: string;
    /** 查询字段的显示标签，用于表单中显示字段的名称。例如：`姓名`、`地址`、`日期` 等。 */
    queryAttributeLabel: string;
    /** 查询字段的类型，用于确定渲染的表单组件类型。支持：`text`（文本输入框）、`date-picker`（日期选择器）、`select`（下拉选择框）。 */
    queryEditType: 'text'|'number'|'select'|'datetime-range'|'date-range'|'date-picker'|'password';
    /** 查询字段的占位符，用于在表单组件中显示提示文本。例如：`请输入姓名`、`选择日期` 等。 */
    queryAttributePlaceholder?: string;
    /**不设置，或者isHidden==false， 即默认进行展示，只有isHidden==true时，默认不进行展示，放置在隐藏查询区域里。 */
    isHidden?: boolean;
    /** 初始值 */
    queryAttributeDefaultValue?: any;
    /** 查询字段的选项列表，仅当 `queryAttributeType` 为 `select` 时有效。每个选项包含 `label`（显示文本）和 `value`（选项值）。 */
    selectOperation?:SelectOperation;
    /** 查询字段的校验规则，用于表单验证。每个规则是一个 `RuleItem` 对象。 */
    rules?: RuleItem[];
    /** 查询字段的默认值 */
   
}

/**
 * 编辑类型配置接口，用于定义表单输入控件的类型和行为
 */
export interface EditType {
    /**
     * 输入控件的类型
     * - 'text': 单行文本输入框
     * - 'area': 多行文本输入框
     * - 'number': 数字输入框
     * - 'select': 下拉选择框
     * - 'date-range': 日期范围选择器
     * - 'datetime-range': 日期时间范围选择器
     * - 'date': 单个日期选择器
     */
    inputType: 'text' | 'area' | 'number' | 'select' | 'date-range' | 'datetime-range' | 'date';
}

/**
 * 下拉框交互操作定义, editType ===select 时，才会生效。
 */
export interface SelectOperation {

    /**
     * value: 真实值（选项值），必须指定。发送请求时，传递的值是key
     * label:展示值（显示文本），必须指定。发送请求时，label不会传递
     * disabled:不可选中标识，可选，不指定或者false 都是允许选择的，只有为true时，才表示不允许选择。
     */
    options: { value: any; label: any; disabled?:boolean ; }[];

    /** 仅支持单选标识，只有两个场景：【单选】、【多选】，为空或者指定false, 表示支持多选，即默认支持多选；指定为true, 只允许【单选】 */
    isSingle?:boolean;
    
    /**多选框展示数量，输入框宽度有限，其他缩略展示。允许为空，不指定默认要全部展示， */
    maxCollapseTags?:number;
    /**默认选中，初始化使用 */
    selected?:true;
}

export interface TextOperation{}
